#ifndef Game_h__
#define Game_h__

#include "./Base/AbstractGame.h"
class OBJMesh;
class TerrainFlat;
class EffectShadow;
class OBJMesh;
class Animation;
class DebugRender;
#include "./Meshes/Mesh.h"
class PhysXObject;
class Character;

class Skeleton;

#include "./Time/Timer.h"
#include "./Forest/TreeNode.h"

#define GAME (Game::GetSingleton())

/** 
* Algemene Game klasse. Hier start het spel.
* @author Ruben Rigole
*/
class Game : public AbstractGame, public TimerCallable
{
public:
	static Game* GetSingleton();
	virtual ~Game();

	void Tick(float dTime);
	void Paint();
	void Init();
	void KeyPressed(WPARAM key);
	void OnResize();
	void CallAction(Timer* callerPtr);

private:
	Game();
	static Game* m_Singleton;

	Character* m_Character;

	TerrainFlat* m_Terrain;
	EffectShadow* m_Effect;

	Skeleton *m_Skeleton;
	Animation* m_AnimWalk;

	Timer* m_Timer;

	Mesh* m_Meshes;
	vector<PhysXObject*> m_PhysXObjects;

	mesh_id m_Box;
	D3DXVECTOR3 m_BoxPos;

	Game(const Game &t);
	Game& operator= (const Game &t);
};

#endif // Game_h__
